#include <stdio.h>

int main(int argc, char **argv)
{
    // freopen()用于新打开一个文件，直接关联到某个已经打开的文件指针。这样可以复用文件指针
    // 它跟fopen()相比，就是多出了第三个参数，表示要复用的文件指针。其他两个参数都一样，分别是文件名和打开模式。
    // freopen()的返回值是它的第三个参数（文件指针）。如果打开失败（比如文件不存在），会返回空指针 NULL。
    // freopen()会自动关闭原先已经打开的文件，如果文件指针并没有指向已经打开的文件，则freopen()等同于fopen()。

    FILE *fp = freopen("output.txt", "w", stdout); // stdout 文件指针指向output.txt文件
    if (fp == NULL)
    {
        printf("error open stdout");
    }
    printf("hello world\n");

    int i, i2;

    scanf("%d", &i);
    printf("%d\n", i);

    FILE *fp2 = freopen("someints.txt", "r", stdin); // stdin 文件指针指向someints.txt文件
    if (fp2 == NULL)
    {
        printf("error open stdin");
    }
    scanf("%d", &i2);
    printf("%d\n", i2);

    // 某些系统允许使用freopen()，改变文件的打开模式。这时，freopen()的第一个参数应该是 NULL。
    // freopen(NULL, "wb", stdout);
    // 上面示例将stdout的打开模式从w改成了wb

    return 0;
}